package cn.itcast.www.jspservletTest;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
//switch标签
public class SwitchTag extends TagSupport {
	//boolean类型的变量，用于判断子标签是否已经执行
	private boolean subTagExecuted;
	public SwitchTag(){
		subTagExecuted = false;
	}
	@Override
	public int doStartTag() throws JspException {
		//当遇到<switch>的起始标签时，子标签还没有开始执行，
		//所以将subTagExecuted设置为false.因为该类实例可以重复使用
		subTagExecuted = false;
		return EVAL_BODY_INCLUDE;
	}
	/**
	 * 这个方法由子标签处理器对象调用，用于判断是否可以执行自身的标签体。
	 */
	public synchronized boolean getPermission(){
		return (!subTagExecuted);
	}
	/*
	 * 如果其中一个子标签满足了条件，则调用这个方法，通知父标签。
	 * 这样，其他的子标签将忽略他们的标签体，从而实现switch..case功能
	 */
	//同一个线程可以锁重入
	public synchronized void subTagSucceeded(){
		subTagExecuted = true;
	}
	
	public void release(){
		subTagExecuted = false;
	}
	
}
